package persistencia;

import modelo.Juego;
import modelo.Policia;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collection;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class ManejadorDeArchivos {
	
	public static void guardar(Juego unJuego, String pathArchivo) throws IOException {
		try {
			
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document doc = db.newDocument();
			Element policias = unJuego.serializarXML(doc);
			doc.appendChild(policias);
			
			TransformerFactory tfact = TransformerFactory.newInstance();
			Transformer transf = tfact.newTransformer();
			DOMSource source = new DOMSource(doc);
			File archivo = new File(pathArchivo);
			StreamResult result = new StreamResult(archivo);
			transf.transform(source, result);	
		} catch (Exception e){
			System.out.println(e);
			throw new IOException();
		}
	}
	
	public static Juego cargar(String pathArchivo, String archivo_ladrones, String archivo_ciudades, String archivo_objetos_robados, String archivo_pistas) throws IOException {
		
		Collection<Policia> policias = new ArrayList<Policia>();
		
		File archivo_polis = new File(pathArchivo);
		if (!archivo_polis.exists()) return new Juego(policias, archivo_ladrones, archivo_ciudades, archivo_objetos_robados, archivo_pistas);
		
		try{
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document doc = db.parse(pathArchivo);
			doc.getDocumentElement().normalize();
			return Juego.cargarDesdeXML(doc, archivo_ladrones, archivo_ciudades, archivo_objetos_robados, archivo_pistas);
		} catch (Exception e){
			throw new IOException();
		}
	}

}
